package com.wujunshen.dumpling.core.execute;

import com.wujunshen.dumpling.common.constant.Constants;
import com.wujunshen.dumpling.common.utils.Assert;
import com.wujunshen.dumpling.core.Configuration;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

/**
 * 抽象执行
 *
 * @author frankwoo
 */
@Slf4j
public abstract class AbstractExecute {
  protected Configuration config;

  protected AbstractExecute(Configuration config) {
    Assert.isNotNull(config);
    this.config = config;
  }

  /**
   * 获取文档名
   *
   * @param schema {@link String} 数据库名
   * @return {@link String} 文档名
   */
  protected String getDocumentName(String schema) {
    // 自定义文件名称不为空
    if (StringUtils.isNotBlank(config.getEngineConfig().getFileName())) {
      return config.getEngineConfig().getFileName();
    }
    // 描述
    String description = config.getDescription();
    if (StringUtils.isBlank(description)) {
      description = Constants.DESCRIPTION;
    }
    // 版本号
    String version = config.getVersion();
    String result = schema + "_" + description;

    return StringUtils.isBlank(version) ? result : result + "_" + version;
  }

  /** 执行生成 */
  public abstract void execute();
}
